package digitalnc.gis.components.support
{
	import mx.collections.ArrayCollection;

	/**
	 * 分级渲染参数类 
	 * @author William
	 * 
	 */	
	public class ClassedRenderDefinition extends LayerRenderDefinition
	{
		private var _classLevelCount:int = 5;
		private var _dataSpatialType:String = "";
		private var _renderAreaType:String = "";
		private var _renderArea:Array = null;
		private var _areaLayerId:String = "";
		private var _pointYCalculateMethod:String = "";
		
		private var _levelDefinitions:ArrayCollection = new ArrayCollection();
		private var _datasource:ArrayCollection = null;
		
		public function ClassedRenderDefinition()
		{
			super();
		}

		/**
		 * 分级渲染的等级数量，默认为5级。 
		 * @return 
		 * 
		 */		
		public function get classLevelCount():int
		{
			return _classLevelCount;
		}
		/**
		 * 分级渲染的等级数量，默认为5级。
		 * @param value
		 * 
		 */
		public function set classLevelCount(value:int):void
		{
			_classLevelCount = value;
		}

		/**
		 * 用于分级渲染的数据的空间特征，取值范围包括：点数据和面数据。 
		 * @return 
		 * 
		 */		
		public function get dataSpatialType():String
		{
			return _dataSpatialType;
		}
		/**
		 * 用于分级渲染的数据的空间特征，取值范围包括：点数据和面数据。  
		 * @param value
		 * 
		 */
		public function set dataSpatialType(value:String):void
		{
			_dataSpatialType = value;
		}

		/**
		 * 渲染区域类型 
		 * @return 
		 * 
		 */		
		public function get renderAreaType():String
		{
			return _renderAreaType;
		}
		/**
		 * 渲染区域类型 
		 * @param value
		 * 
		 */
		public function set renderAreaType(value:String):void
		{
			_renderAreaType = value;
		}
		
		/**
		 * 渲染区域 
		 * @return 
		 * 
		 */		
		public function get renderArea():Array
		{
			return _renderArea;
		}
		/**
		 * 渲染区域 
		 * @param value：区域标识数组，如：行政区编号的数组：["320001","320002","320003",...]
		 * 
		 */
		public function set renderArea(value:Array):void
		{
			_renderArea = value;
		}
		
		/**
		 * Map对象中对应区域的layer ID，通过此 ID能够在Map对象中获取到对应的区域图层，程序需要
		 * 从此图层中搜索由renderArea属性指定的区域空间对象（Geometry对象）
		 * @return 
		 * 
		 */		
		public function get areaLayerId():String
		{
			return _areaLayerId;
		}
		/**
		 * Map对象中对应区域的layer ID，通过此 ID能够在Map对象中获取到对应的区域图层，程序需要
		 * 从此图层中搜索由renderArea属性指定的区域空间对象（Geometry对象）
		 * @param value
		 * 
		 */
		public function set areaLayerId(value:String):void
		{
			_areaLayerId = value;
		}

		/**
		 * 点位渲染值得计算方式。当一个渲染区域内包括了多个点位值时，根据此属性指定的计算方式（计算平均值或者最大、最小值等）
		 * 计算出当前区域的唯一值。 
		 * @return 
		 * 
		 */		
		public function get pointYCalculateMethod():String
		{
			return _pointYCalculateMethod;
		}
		/**
		 * 点位渲染值得计算方式。当一个渲染区域内包括了多个点位值时，根据此属性指定的计算方式（计算平均值或者最大、最小值等）
		 * 计算出当前区域的唯一值。  
		 * @param value
		 * 
		 */
		public function set pointYCalculateMethod(value:String):void
		{
			_pointYCalculateMethod = value;
		}

		

		/**
		 * 分级渲染的详细设置 
		 * @return 
		 * 
		 */		
		public function get levelDefinitions():ArrayCollection
		{
			return _levelDefinitions;
		}
		/**
		 * 分级渲染的详细设置 
		 * @param value
		 * 
		 */
		public function set levelDefinitions(value:ArrayCollection):void
		{
			_levelDefinitions = value;
		}
		
		/**
		 * 用于分级渲染的数据源。数据源表现为一个集合，集合中的元素为一个数据对象。数据对象的字段可以随意定义，
		 * 但必须具备longitude（经度）和latitude（纬度）以及pointXFiled属性和pointYField属性设定的字段。
		 * @return 
		 * 
		 */		
		public function get datasource():ArrayCollection
		{
			return _datasource;
		}
		/**
		 * 用于分级渲染的数据源。数据源表现为一个集合，集合中的元素为一个数据对象。数据对象的字段可以随意定义，
		 * 但必须具备longitude（经度）和latitude（纬度）以及pointXFiled属性和pointYField属性设定的字段。
		 * @param value
		 * 
		 */
		public function set datasource(value:ArrayCollection):void
		{
			_datasource = value;
		}
		
		//----- 方法 ----------------------------------------------------------------
		public function addLevelDefinition(minValue:Number, maxValue:Number, colorCode:uint):void
		{
			var ld:ClassLevelDefinition = new ClassLevelDefinition();
			ld.levelId = this._levelDefinitions.length;
			ld.minValue = minValue;
			ld.maxValue = maxValue;
			ld.levelColor = colorCode;
			
			this._levelDefinitions.addItem(ld);
		}

		public function removeLevelDefinition(levelIndex:int):void
		{
			this._levelDefinitions.removeItemAt(levelIndex);
		}
	}
	
}